﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using DevExpress.XtraEditors;
using LayerEntity.Hotel;
using LayerEntity.Almacen;
using LayerEntity.Sistema;
using LayerLogic;
using System.Collections;

namespace System2012.Almacen
{
    public partial class frmTomaInventario : DevExpress.XtraEditors.XtraForm
    {
        string PLANTILLA;
        string IMPRESORA;
        /// <summary>
        /// Indica si estamos editanado o creando uno Nuevo
        /// 0: Nuevo Documento
        /// 1: Editando y Guardando
        /// </summary>
        int operacion = 0;
        /// <summary>
        /// RowCab: almacen el indece de la cabcera del inventrario
        /// </summary>
        int RowCab;
        /// <summary>
        /// tbInventory almacen los registros de la tabla inventario
        /// </summary>
        DataTable tbInventory;
        public frmTomaInventario()
        {
            InitializeComponent();
            this.txtNroComprobante.Leave += new EventHandler(NroComprobante_Leave);
            this.txtNroComprobante.Enter += new EventHandler(NroComprobante_Enter);
            txtSerie.Leave += new EventHandler(Serie_Leave);
            txtSerie.Enter += new EventHandler(Serie_Enter);
            RecControles(this);
            if (!BGWEmpresa.IsBusy) BGWEmpresa.RunWorkerAsync();

        }
        #region Gestion de Plantillas
        private void getPlantilla()
        {
            if (cmbDocumento.EditValue != null)
            {
                ESistema obj = new ESistema();
                StringBuilder cadena = new StringBuilder();
                cadena.Append("where id_tranzaccion='");
                cadena.Append(20 + "' and ");
                cadena.Append(" id_documento=");
                cadena.Append(cmbDocumento.EditValue + "");
                obj.Condicion = cadena.ToString();
                DataTable dtb = System2012.SystemUtils.RecordManagerCommonList.GetListaSeriesDocumento(obj);
                if (dtb.Rows.Count > 0)
                {
                    PLANTILLA = dtb.Rows[0]["plantilla"].ToString();
                    IMPRESORA = dtb.Rows[0]["impresora"].ToString();
                    txtSerie.Text = dtb.Rows[0]["serie"].ToString();
                    getCorrelativo();
                }
                else
                {
                    txtSerie.Text = null;
                    PLANTILLA = null;
                    IMPRESORA = null;
                }
            }
        }
        
        private void getCorrelativo()
        {
            ESeriesDocumento Es = new ESeriesDocumento();
            Es.Id_Tranzaccion = "20";
            Es.Id_Documento = int.Parse(cmbDocumento.EditValue.ToString());
            Es.Serie = txtSerie.Text;
            Es.Id_Sucursal = 1;
            string correlativo = System2012.SystemUtils.CommonMaintenanceList.getCorrelativo(Es);
            txtNroComprobante.Text = correlativo.PadLeft(7, '0');
        }
        #endregion
        #region Correlativos Eventos

        private void NroComprobante_Leave(object sender, EventArgs e)
        {
            string codigo = this.txtNroComprobante.Text;
            while (codigo.Length < 7)
            {
                codigo = string.Format("0{0}", codigo);
            }
            this.txtNroComprobante.Text = codigo;
        }

        private void NroComprobante_Enter(object sender, EventArgs e)
        {
            if (this.txtNroComprobante.Text.Length > 0)
            {
                int codigo = int.Parse(this.txtNroComprobante.Text);
                this.txtNroComprobante.Text = string.Format("{0}", codigo);
            }
        }

        private void Serie_Enter(object sender, EventArgs e)
        {
            if (this.txtSerie.Text.Length > 0)
            {
                int codigo = int.Parse(this.txtSerie.Text);
                this.txtSerie.Text = string.Format("{0}", codigo);
            }
        }

        private void Serie_Leave(object sender, EventArgs e)
        {
            string codigo = this.txtSerie.Text;
            while (codigo.Length < 4)
            {
                codigo = string.Format("0{0}", codigo);
            }
            this.txtSerie.Text = codigo;
        }
        #endregion

        #region Desplazamientos
        private void PresionadoTeclas(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter || e.KeyCode == Keys.Down)
            {
                
                if (sender == this.txtSerie)
                {
                    this.txtNroComprobante.Focus();
                    this.txtNroComprobante.SelectAll();
                }
                if (sender == this.txtNroComprobante)
                {
                    this.txtFecha.Focus();
                    this.txtFecha.SelectAll();
                }
                if (sender == this.txtFecha)
                {
                    this.cmbTipoInvent.Focus();
                    this.cmbTipoInvent.SelectAll();
                }
               
                if (sender == this.txtReferencia)
                {
                    this.cmbEstado.Focus();
                    this.cmbEstado.SelectAll();
                }
            }
            if (e.KeyCode == Keys.Enter || e.KeyCode == Keys.Right)
            {
                if (sender == this.cmbEmpresa)
                {
                    this.cmbSucursal.Focus();
                    this.cmbSucursal.SelectAll();
                }
                if (sender == this.cmbSucursal)
                {
                    this.cmbAlmacen.Focus();
                    this.cmbAlmacen.SelectAll();
                }

                if (sender == this.cmbAlmacen)
                {
                    this.cmbDocumento.Focus();
                    this.cmbDocumento.SelectAll();
                }
                if (sender == this.cmbDocumento)
                {
                    this.txtSerie.Focus();
                    this.txtSerie.SelectAll();
                }
                if (sender == this.cmbTipoInvent)
                {
                    this.txtReferencia.Focus();
                    this.txtReferencia.SelectAll();
                }
            }
            if (e.KeyCode == Keys.Up)
            {
                
                if (sender ==txtSerie)
                {
                    this.cmbDocumento.Focus();
                    this.cmbDocumento.SelectAll();
                }
                if (sender ==txtNroComprobante)
                {
                    this.txtSerie.Focus();
                    this.txtSerie.SelectAll();
                }
                if (sender ==txtFecha)
                {
                    this.txtNroComprobante.Focus();
                    this.txtNroComprobante.SelectAll();
                }
               
                if (sender ==txtReferencia)
                {
                    this.cmbTipoInvent.Focus();
                    this.cmbTipoInvent.SelectAll();
                }
                
            }
            if (e.KeyCode == Keys.Left)
            {
                if (sender == cmbSucursal)
                {
                    this.cmbEmpresa.Focus();
                    this.cmbEmpresa.SelectAll();
                }
                if (sender == cmbAlmacen)
                {
                    this.cmbSucursal.Focus();
                    this.cmbSucursal.SelectAll();
                }

                if (sender == cmbDocumento)
                {
                    this.cmbAlmacen.Focus();
                    this.cmbAlmacen.SelectAll();
                }
                if (sender == cmbTipoInvent)
                {
                    this.txtFecha.Focus();
                    this.txtFecha.SelectAll();
                }
                if (sender == cmbEstado)
                {
                    this.txtReferencia.Focus();
                    this.txtReferencia.SelectAll();
                }
            }
        }
        public void RecControles(Control control)
        {
            foreach (Control contHijo in control.Controls)
            {
                if (contHijo.HasChildren)
                {
                    this.RecControles(contHijo);
                }
                contHijo.KeyDown += new KeyEventHandler(PresionadoTeclas);
            }
        }
        #endregion
        #region Operaciones 
        private void Grabar()
        {
            EInventario obj = new EInventario();
                obj.Id_almacen=int.Parse(cmbAlmacen.EditValue.ToString()); 
			    obj.Anio="";
			    obj.Fecha=txtFecha.DateTime;
			    obj.Imp_total=0; 
			    obj.Consolidado=false; 
			    obj.Idusuario=""; 
			    obj.Id_estado=int.Parse(cmbEstado.EditValue.ToString());
			    obj.Serie=txtSerie.Text; 
			    obj.Nro_inventario=txtNroComprobante.Text ; 
			    obj.Id_documento=int.Parse(cmbDocumento.EditValue.ToString());
			    obj.Id_tipoinv=int.Parse(cmbTipoInvent.EditValue.ToString());
			    obj.Referencia=txtReferencia.Text ;
                obj.Id_tranzaccion = "20";
                object[] Msg = System2012.SystemUtils.RecordmanagerAlmacen.MantenimientoInventarios(obj, this.operacion == 0 ? EnumOperaciones.Insertar : EnumOperaciones.Actualizar);
                MessageBox.Show(this,Msg[0].ToString());
        }
        #endregion
        #region Validar
        private bool ValidarNroComprobante()
        {
            bool res = false;
            if (this.txtSerie.Text != string.Empty && this.txtNroComprobante.Text != string.Empty)
            {
                if (int.Parse(this.txtSerie.Text) == 0)
                {
                    res = false;
                    this.txtSerie.Focus();
                }
                else
                {
                    if (int.Parse(this.txtNroComprobante.Text) == 0)
                    {
                        res = false;
                        this.txtNroComprobante.Focus();
                    }
                    else
                    {
                        res = true;
                    }
                }
            }
            else
            {
                this.txtSerie.Focus();
                res = false;
            }
            return res;
        }
        private bool ValidarForm()
        {
            bool res = true;
            if (cmbEmpresa.ItemIndex == -1)
            {
                res = false;
                XtraMessageBox.Show(this, "Seleccione una empresa", "AVISO", MessageBoxButtons.OK, MessageBoxIcon.Error);
                cmbEmpresa.Focus();
            }
            else
            {
                if (cmbSucursal.ItemIndex == -1)
                {
                    res = false;
                    XtraMessageBox.Show(this, "Seleccione una sucursal", "AVISO", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    cmbSucursal.Focus();
                }
                else
                {
                    if (cmbAlmacen.ItemIndex == -1)
                    {
                        res = false;
                        XtraMessageBox.Show(this, "Seleccione un Almacen", "AVISO", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        cmbAlmacen.Focus();
                    }
                    else
                    {
                        if (cmbDocumento.ItemIndex == -1)
                        {
                            res = false;
                            XtraMessageBox.Show(this, "Seleccione un tipo de Documento", "AVISO", MessageBoxButtons.OK, MessageBoxIcon.Error);
                            cmbDocumento.Focus();
                        }
                        else
                        {
                            if (txtSerie.Text == string.Empty)
                            {
                                res = false;
                                XtraMessageBox.Show(this, "Ingrese Correctamente la Serie del Documento", "AVISO", MessageBoxButtons.OK, MessageBoxIcon.Error);
                                txtSerie.Focus();
                            }
                            else
                            {
                                if (txtNroComprobante.Text == string.Empty)
                                {
                                    res = false;
                                    XtraMessageBox.Show(this, "Genere Correactamente el Nro del Documento", "AVISO", MessageBoxButtons.OK, MessageBoxIcon.Error);
                                    txtNroComprobante.Focus();
                                }
                                else
                                {
                                    if (txtFecha.Text == string.Empty)
                                    {
                                        res = false;
                                        XtraMessageBox.Show(this, "Ingrese Correctamente la fecha del Inventario", "AVISO", MessageBoxButtons.OK, MessageBoxIcon.Error);
                                        txtFecha.Focus();
                                    }
                                    else
                                    {
                                        if (cmbTipoInvent.ItemIndex==-1)
                                        {
                                            res = false;
                                            XtraMessageBox.Show(this, "Seleccione el Tipo de Inventario", "AVISO", MessageBoxButtons.OK, MessageBoxIcon.Error);
                                            cmbTipoInvent.Focus();
                                        }
                                        else
                                        {
                                            if (cmbEstado.ItemIndex==-1)
                                            {
                                                res = false;
                                                XtraMessageBox.Show(this, "No ha seleccionado ningun estado", "AVISO", MessageBoxButtons.OK, MessageBoxIcon.Error);
                                                cmbEstado.Focus();
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
            return res;
        }
        #endregion
        
        private void BGWEmpresa_DoWork(object sender, DoWorkEventArgs e)
        {
            e.Result = System2012.SystemUtils.RecordManagerCommonList.GetEmpresas();
        }

        private void BGWEmpresa_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            this.cmbEmpresa.Properties.DataSource = e.Result;
            if (!BGWTipDoc.IsBusy) BGWTipDoc.RunWorkerAsync();
        }

        private void BGWSucursal_DoWork(object sender, DoWorkEventArgs e)
        {
            EHotel obj = new EHotel();
            obj.Condicion = "where id_empresa=" + this.cmbEmpresa.EditValue.ToString();
            e.Result = System2012.SystemUtils.RecordManagerCommonList.GetListaSucursal(obj);
        }

        private void BGWSucursal_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            this.cmbSucursal.Properties.DataSource = e.Result;
           // if (!BGWEstado.IsBusy) BGWEstado.RunWorkerAsync();
        }

        private void BGWAlmacen_DoWork(object sender, DoWorkEventArgs e)
        {
            EAlmacen obj = new EAlmacen();
            StringBuilder cadena = new StringBuilder();
            cadena.Append("where id_hotel=");
            cadena.Append(this.cmbSucursal.EditValue);
            obj.Condicion = cadena.ToString();
            e.Result = System2012.SystemUtils.RecordmanagerAlmacen.GetListaAlamcen(obj);
        }

        private void BGWAlmacen_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            cmbAlmacen.Properties.DataSource = e.Result;
        }

        private void cmbEmpresa_EditValueChanged(object sender, EventArgs e)
        {
            if (!BGWSucursal.IsBusy) BGWSucursal.RunWorkerAsync();
        }

        private void cmbSucursal_EditValueChanged(object sender, EventArgs e)
        {
            if (!BGWAlmacen.IsBusy) BGWAlmacen.RunWorkerAsync();
        }

        private void BGWTipDoc_DoWork(object sender, DoWorkEventArgs e)
        {
            e.Result = System2012.SystemUtils.RecordManagerCommonList.GetDocument(2);
        }

        private void BGWTipDoc_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            cmbDocumento.Properties.DataSource = e.Result;
            if (!BGWTipoInventario.IsBusy) BGWTipoInventario.RunWorkerAsync();
        }

        private void BGWTipoInventario_DoWork(object sender, DoWorkEventArgs e)
        {
            e.Result = System2012.SystemUtils.RecordManagerCommonList.GetTipoInventario();
        }

        private void BGWTipoInventario_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            cmbTipoInvent.Properties.DataSource = e.Result;
            if (!BGWEstado.IsBusy) BGWEstado.RunWorkerAsync();
        }

        private void BGWEstado_DoWork(object sender, DoWorkEventArgs e)
        {
            e.Result = System2012.SystemUtils.RecordManagerCommonList.GetEstados();
        }

        private void BGWEstado_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            cmbEstado.Properties.DataSource = e.Result;
            if (!BGWListarCabcera.IsBusy) BGWListarCabcera.RunWorkerAsync();
        }

        private void cmbDocumento_EditValueChanged(object sender, EventArgs e)
        {
            getPlantilla();
        }

        private void cmbDocumento_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == 13)
            {
                getCorrelativo();
            }
        }

        private void cmbDocumento_KeyUp(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter || e.KeyCode == Keys.Left || e.KeyCode == Keys.Up || e.KeyCode == Keys.Down)
            {
                getPlantilla();
            }
        }

        private void btnGrabar_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            if (ValidarForm())
            {
                if (ValidarNroComprobante() == true)
                {
                    Grabar();
                }
                else
                {
                    XtraMessageBox.Show(this, "Ingrese Correctamen Serie y Nro de Comprobante", "AVISO", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    this.txtSerie.Focus();
                }
            }
        }

        private void txtNroComprobante_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == 13)
            {
                getCorrelativo();
            }
        }

        private void BGWListarCabcera_DoWork(object sender, DoWorkEventArgs e)
        {
            ESistema obj = new ESistema();
            obj.Condicion = "";
            e.Result = System2012.SystemUtils.RecordmanagerAlmacen.GetListaCabInventario(obj);
        }

        private void BGWListarCabcera_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            tbInventory = (DataTable)e.Result;
            gridControl1.DataSource = e.Result;
        }

        private void barButtonItem2_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            ArrayList data = new ArrayList();
            data.Add(tbInventory.Rows[RowCab]["id_almacen"]);//0
            data.Add(tbInventory.Rows[RowCab]["id_documento"]);//1
            data.Add(tbInventory.Rows[RowCab]["serie"]);//2
            data.Add(tbInventory.Rows[RowCab]["nro_inventario"]);//3
            data.Add(tbInventory.Rows[RowCab]["fecha"]);//4
            frmIngresoInventario f = new frmIngresoInventario(data);
            f.ShowDialog();
        }

        private void gridView1_FocusedRowChanged(object sender, DevExpress.XtraGrid.Views.Base.FocusedRowChangedEventArgs e)
        {
            RowCab = e.FocusedRowHandle;
            if (e.FocusedRowHandle >= 0)
            {
                if (!BGWDetInventory.IsBusy) BGWDetInventory.RunWorkerAsync();
            }
        }

        private void BGWDetInventory_DoWork(object sender, DoWorkEventArgs e)
        {
            ESistema obj = new ESistema();
            obj.Condicion = "";
            e.Result = System2012.SystemUtils.RecordmanagerAlmacen.GetListaDetInventario(obj);
        }

        private void BGWDetInventory_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            gridControl2.DataSource = e.Result;
        }
    }
}